home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
alangsbs.zip
/
MYLIB.MAC
< prev
next >
Wrap
Text File
|
1991-12-15
|
7KB
|
161 lines
;---------------------------------------------------------------
; MYLIB.MAC
; Macro library from ASSEMBLING FROM SQUARE ONE
;
; by Jeff Duntemann
; MASM/TASM
; Last update 3/16/89
;---------------------------------------------------------------
;---------------------------------------------------------------
; CLEAR -- Clears the entire visible screen buffer
; Last update 3/16/89
;
; Caller must pass:
; In VidAddress: The address of the video refresh buffer
; In ClearAtom: The character/attribute pair to fill the
; buffer with. The high byte contains the
; attribute and the low byte the character.
; In BufLength: The number of *characters* in the visible
; display buffer, *not* the number of bytes!
; This is typically 2000 for a 25-line screen
; or 4000 for a 50-line screen.
; Action: Clears the screen by machine-gunning the
; character/attribute pair in AX into the
; display buffer beginning at VidAddress.
;---------------------------------------------------------------
Clear MACRO VidAddress,ClearAtom,BufLength
les DI,DWORD PTR VidAddress
mov AX,ClearAtom
mov CX,BufLength
rep stosw
GotoXY 0,0
ENDM
;---------------------------------------------------------------
; RULER -- Displays a "1234567890"-style ruler on-screen
; Last update 11/25/91
;
; Caller must pass:
; In VidAddress: The address of the start of the video buffer
; In Length: The length of the ruler to be displayed
; In ScreenW: The width of the current screen (usually 80)
; In ScreenY: The line of the screen where the ruler is
; to be displayed (0-24)
; In ScreenX: The row of the screen where the ruler should
; start (0-79)
; Action: Displays an ASCII ruler at ScreenX,ScreenY.
;---------------------------------------------------------------
Ruler MACRO VidAddress,Length,ScreenW,ScreenX,ScreenY
les DI,DWORD PTR VidAddress
mov AL,ScreenY ; Move Y position to AL
mov AH,ScreenW ; Move screen width to AH
imul AH ; Do 8-bit multiply AL*AH to AX
add DI,AX ; Add Y offset into vidbuff to DI
add DI,ScreenX ; Add X offset into vidbuf to DI
shl DI,1 ; Multiply by two for final address
mov CX,Length ; CX monitors the ruler length
mov AH,07 ; Attribute 7 is "normal" text
mov AL,'1' ; Start with digit "1"
DoChar: stosw ; Note that there's no REP prefix!
add AL,'1' ; Bump the character value in AL up by 1
aaa ; Adjust AX to make this a BCD addition
add AL,'0' ; Basically, put binary 3 in AL's high nybble
mov AH,07 ; Make sure our attribute is still 7
loop DoChar ; Go back & do another char until BL goes to 0
ENDM
;---------------------------------------------------------------
; GOTOXY -- Positions the hardware cursor to X,Y
; Last update 3/5/89
;
; Caller must pass:
; In NewX: The new X value
; In NewY: The new Y value
; These are both 0-based; i.e., they assume a screen
; whose dimensions are 24 by 79, not 25 by 80.
; Action: Moves the hardware cursor to the X,Y position
; passed as NewX and NewY.
;---------------------------------------------------------------
GotoXY MACRO NewX,NewY
mov DH,NewY
mov DL,NewX
mov AH,02H ; Select VIDEO service 2: Position cursor
mov BH,0 ; Stay with display page 0
int 10H ; Call VIDEO
ENDM
;---------------------------------------------------------------
; NEWLINE -- Sends a newline sequence to DOS Standard Output
; via DOS service 40H
; Last update 3/16/89
;
; Caller need not pass any parameters.
; Action: Sends a newline sequence DOS Standard Output
;---------------------------------------------------------------
Newline MACRO
Write CRLF,2
ENDM
;---------------------------------------------------------------
; POKECHAR -- Inserts a single character into a string
; Last update 3/16/89
;
; Caller must pass:
; In Target: The name of the string to be poked at
; In TheChar: The character to be pocked into the string
; In ToPos: The 0-based position in the string to poke to
; Action: Pokes character passed in TheChar into string
; passed in Target to position passed in ToPos.
; The first character in the string is 0, etc.
;---------------------------------------------------------------
PokeChar MACRO Target,TheChar,ToPos
lea BX,Target ; Load the address of target string into BX
mov BYTE PTR [BX+ToPos],TheChar ; Move char into the string
ENDM
;---------------------------------------------------------------
; WRITE -- Displays information to the screen via DOS
; service 40: Print String to Standard Output
; Last update 3/16/89
;
; Caller must pass:
; In ShowIt: The name of the string to be displayed
; In ShowLength: The length of the string to be displayed
; Action: Displays the string to DOS Standard Output
;---------------------------------------------------------------
Write MACRO ShowIt,ShowLength
mov BX,1 ; Selects DOS file handle 1: Standard Output
mov CX,ShowLength ; Length of string passed in CX
lea DX,Showit ; Offset address of string is passed in DX
mov AH,40H ; Select DOS service 40: Print String
int 21H ; Call DOS
ENDM
;---------------------------------------------------------------
; WRITELN -- Displays information to the screen via DOS
; service 40H: Display to Standard Output, then
; issues a newline
; Last update 3/16/89
;
; Caller must pass:
; In ShowIt: The name of the string to be displayed
; In ShowLength: The length of the string to be displayed
; Action: Displays the string in ShowIt, then issues a
; newline. Hardware cursor will move to the
; left margin of the following line. If the
; display is to the bottom screen line, the
; screen will scroll.
; Calls: Write
;---------------------------------------------------------------
Writeln MACRO ShowIt,ShowLength
Write ShowIt,ShowLength ; Display the string proper through Write
Write CRLF,2 ; Display the newline string through Write
ENDM